package Negocio;

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import DTO.CarrierVO;
import SRV.DireccionSRV;
import SRV.FacturaProveedorSRV;

@Entity
@DiscriminatorValue("carrier")
public class Carrier extends Proveedor
{
	@OneToMany 
	@JoinColumn(name="cuit")
	private Collection<PrecioCarrier> costos;
	
	public Carrier(long cuit, String nombre, Direccion direccion) 
	{
		super(cuit, nombre, direccion);
		this.costos = new ArrayList<PrecioCarrier>();
	}

	public Carrier() {}

	public Carrier toBusiness(CarrierVO carrier){
	    Direccion direccion = new Direccion();
	    DireccionSRV daoDir =  new DireccionSRV();
	    direccion = daoDir.getDireccion(carrier.getDireccion());
	    
	    Carrier devuelto = new Carrier(carrier.getCuit(), carrier.getNombre(), direccion);
	    
	    FacturaProveedor factura = new FacturaProveedor();
	    FacturaProveedorSRV daoFact = new FacturaProveedorSRV();
	    
	    for (Integer idAux : carrier.getFacturas()){
	    	factura = daoFact.getFacturaProvvedor(idAux);
	    	devuelto.agregarFactura(factura);
	    }
	    
	    return devuelto;
	}
	
	public ArrayList<PrecioCarrier> getCostos() {
		return (ArrayList<PrecioCarrier>) costos;
	}

	public void setCostos(ArrayList<PrecioCarrier> costos) {
		this.costos = costos;
	}
	
	public boolean tenesEstePrecio(int idPrecioCarrier){
		for (PrecioCarrier precio : costos){
			if (precio.sosElPrecioCarrier(idPrecioCarrier))
				return true;
		}
		return false;
	}
	
	public void agregarPrecioCarrier(PrecioCarrier precioCarrier){
		if (!tenesEstePrecio(precioCarrier.getIdPrecioCarrier()))
			costos.add(precioCarrier);
	}
	
	public void deshabilitarPrecioCarrier(int idPrecioCarrier){
		for (PrecioCarrier precio : costos){
			if (precio.getIdPrecioCarrier() == idPrecioCarrier)
				precio.setEstado(false);
		}
	}
	
	public CarrierVO toVO(){
		ArrayList<Integer> costosVO = new ArrayList<Integer>();
	    for (PrecioCarrier aux : getCostos()){
	    	costosVO.add(aux.getIdPrecioCarrier());
	    }
		
	    ArrayList<Integer> facturasVO = new ArrayList<Integer>();
	    for (FacturaProveedor aux : getFacturas()){
		facturasVO.add(aux.getIdFacturaProveedor());
	    }
	    
		
	
		CarrierVO carrier = new CarrierVO(getCuit(), this.getNombre(), this.getDireccion().getIdDireccion(), facturasVO, costosVO);
		return carrier;
	}
	
	public boolean esCarrier(){
		return true;
	}
	
	public boolean esTallerGeneral(){
		return false;
	}
	
	public boolean esTallerOficial(){
		return false;
	}
	
	public boolean esAgenteOficial(){
		return false;
	}
	
	public boolean esEmpresaSeguros(){
		return false;
	}
	
	public boolean esEmpresaSeguridad(){
		return false;
	}
	
	public float getCosto(String pais) {
		for (PrecioCarrier aux : getCostos()){
			if(aux.getPais().equals(pais))
				return aux.getCosto();
		}
		return -1;
	}
	
	public boolean mandasPais(String pais){
		for(PrecioCarrier aux : costos){
			if(aux.getPais().equalsIgnoreCase(pais)){
				return true;
			}
		}
		return false;
	}
}
